package com.dxf.chepter11

/**
 * Akka 是java虚拟机jvm平台上构建高并发,分布式和容错应用的工具包和运行时
 *
 * 可以理解成 Akka是编写并发程序的框架
 *
 * Akka 用scala语言写成,同时提供Scala和java的开发接口
 *
 * Akka 主要解决的问题是: 可以轻松写出高效稳定的并发程序,程序员不再过多考虑线程,锁,资源竞争等细节
 *
 *  =================================================================
 *
 *
 *
 *  Akka中的核心模型 Actor模型  -->可以很好的处理并发编程的一种解决方案
 *
 *  Actor模型说明
 *   1 Akka并发模型 Actor
 *   2 在基于Actor的系统里,所有事物都是Actor
 *   3 Actor模型是作为一个并发模型设计和架构的,Actor于Actor之间只能通过消息通信
 *   4 Actor 与Actor之间只能通过消息进行通信,当一个Actor给另外一个Actor发送消息,消息是有序的(消息队列),只需要将消息投递相应的邮箱即可
 *   5 怎么处理消息是由接受消息的Actor决定的,发送消息的Actor可以等待回复,也可以异步处理
 *   6 ActorSystem的职责是负责创建并管理其创建的Actor  ActorSystem是一个工厂,专门负责创建Actor,一个jvm进程中有一个即可
 *   7 Actor模型是对并发模型进行更高的抽象
 *   8 Actor模型 异步,非阻塞,高性能事件驱动编程模型
 *   9 Actor模型是轻量级事件处理 (1GB 内容可容纳百万级别个Actor),因此处理大并发性能高
 *
 * ========================================
 *
 *  工作机制
 *   1 A Actor 如果想给自己发消息,通过 A ActorRef
 *   2 A Actor 想给B Actor 发消息,需要持有B ActorRel ,通过B ActorRef 发消息
 *   3 B Actor中 receive 方法 用于消息接收和处理, sender方法可以得到发送消息的Actor的ActorRef,通过这个ActorRel ,B Actor也可以回复消息
 *
 *   Actor之间传递消息机制
 *   1 每一个消息 就是一个message对象,Message继承了Runable ,因为Message就是线程类
 *   2 Actor模型工作机制看上去很麻烦,但是程序员只需要编写Actor就可以了,其它交给Actor模型完成即可
 *   4 A Actor要给B Actor发送消息,A要先拿到B 的 ActorRel(代理对象)
 *
 * ===============================================
 *
 *   案例:
 *    1 编写一个Actor,
 *    2 SayHelloActor 给自己发消息
 *    3 要求使用maven来构建
 *
 *
 *  ==========================================
 *
 *
 *   Akka总结:
 *    1 每一个Actor包含 ActorRef(地址) 和 MsgBox(邮箱)
 *    2 Actor之间通信是通过DisPatch Message(消息分发器) 实现的
 *    3 创建Actor之前 要有 ActorSystem(工厂类)  ,创建工厂类方式  private val actorFactory = ActorSystem("actorFactory")
 *    4 创建Actor是通过工厂类实现的,方式   private val sayHelloActorRef:ActorRef = actorFactory.actorOf(Props[SayHelloActor],"sayHelloActor")
 *    4.1 Props[SayHelloActor] 会通过反射创建SayHelloActor对象,当然也可以new的形式(还能带参数)  Props[new SayHelloActor(xx)]
 *    5 创建Actor后可以得到这个Actor的 ActorRef
 *    6 要向那个Actor发送数据,就通过  ActorRef ! msg 形式发送
 *    7 发送的msg会先过 dispatch Message(消息分发器) 在 根据 ActorRef找到 对应Actor的 MsgBox(邮箱) 并 放入其中
 *    8 MsgBox(邮箱)是一个队列,实现runnable接口,有数据了会推送消息给 receive()方法,即receive得到了消息内容
 *
 *
 *
 */
object T144_Akka快速入门 {
  def main(args: Array[String]): Unit = {
    val server = new ycServer
    server.aaa()
    server aaa
  }

}

class ycServer{

  def aaa(): Unit ={
    println(11)
  }
}
